home *** CD-ROM | disk | FTP | other *** search
- PROGRAM ADBLister;
-
- {Cameron Birse, Macintosh Technical Support}
-
- uses Memtypes,QuickDraw,OSIntf,ToolIntf;
- TYPE
- SysEnvRec = RECORD
- environsVersion: INTEGER;
- machineType: INTEGER;
- systemVersion: INTEGER;
- processor: INTEGER;
- hasFPU: BOOLEAN;
- hasColorQD: BOOLEAN;
- keyBoardType: INTEGER;
- atDrvrVersNum: INTEGER;
- sysVRefNum: INTEGER;
- END;
-
- fourBytes = packed array [0..3] of byte;
-
- CONST
- CurrentA5 = $904;
-
- VAR
- err : Integer;
- NumDevs : integer;
- DevBlock : ADBDataBlock;
- Addrs : ADBAddress;
- CmdNum : integer;
- ADBData : str255;
- GotLEDs, CompTrue, gotADB : boolean;
- Count, opCount, timer : integer;
- finalTicks : longint;
- TimeOut : integer;
- TheWorld : SysEnvRec;
- a : char;
- MyA5,R3Data : longint;
- ParseData : fourBytes;
-
- {------------------------------------------------------------------------------------}
-
- PROCEDURE Debugger; INLINE $A9FF;
-
- FUNCTION SysEnvirons(versionRequested: INTEGER; VAR theWorld: SysEnvRec): OSErr;
- INLINE $205f,$301f, $A090, $3e80;
-
- PROCEDURE ShutDwnStart;
- INLINE $3F3C,$0002,$A895;
-
- PROCEDURE PushA5;
- INLINE $2F0D; {move.l a5,-(a7) ;push current A5 onto stack}
-
- PROCEDURE PopA5;
- INLINE $2A5F; {move.l (a7)+,a5 ;pop stack into A5}
-
- PROCEDURE GetMyA5;
- INLINE $2A52; {movea.l (a2),a5 ;move apps a5 (pointed to by a2) into a5}
-
- FUNCTION GetCurA5:longint;
- INLINE $2E8D;
-
- FUNCTION GetADBData:longint;
- INLINE $2E90; {move.l (a0),(a7) ;move ADB Data onto stack}
-
- {------------------------------------------------------------------------------------}
-
- PROCEDURE ADBComplete;
-
- BEGIN
-
- PushA5;
- GetMyA5;
- R3Data := GetADBData;
- Count := Count + 1;
- CompTrue := True;
- PopA5;
-
- END;
-
- {------------------------------------------------------------------------------------}
-
- BEGIN {main PROGRAM}
-
- gotADB := false; {assume no ADB, and just exit if none}
- err:= SysEnvirons (1,TheWorld);
- if err = noerr then
- begin
- case theworld.machineType of
- 0,1,2 : begin
- gotADB := false;
- Writeln ('Yes, we have no ADB today.');
- Writeln ('Press the mouse button to exit.');
- repeat until button;
- end;
- Otherwise gotADB := True;
- end; {case}
- end
- else
- begin
- writeln ('SysEnvirons error = ',err);
- writeln ('Please press the mouse button to exit');
- repeat until button;
- end;
- If gotADB then
- BEGIN
- MyA5 := GetCurA5;
- NumDevs := countADBs;
- writeln ('there are ',NumDevs,' ADB devices on this machine');
- writeln ('');
-
- repeat
- writeln ('press mouse to continue');
- writeln ('');
- repeat until button;
- comptrue := false;
- Addrs := GetIndADB (DevBlock, NumDevs);
- Case DevBlock.origADBAddr of
- 3 : Writeln ('Mouse');
- 2 : Begin
- Case DevBlock.devType of
- 1 : Begin
- Writeln ('Apple Standard KeyBoard');
- GotLEDs := false;
- end;
- 2 : Begin
- Writeln ('Apple Extended KeyBoard');
- GotLEDs := true;
- end;
- end; {case}
- end;
- end; {case}
- CmdNum := ((Addrs*16)+$0F); {Device Address X, Talk command, Register 3}
- ADBData[0] := Char($00);
- ADBData[1] := Char($00);
- ADBData[2] := Char($00);
- err := ADBOp (@MyA5, @ADBComplete,@ADBData, CmdNum);
- if err = noerr then
- begin
- count := 0;
- repeat
- count := count + 1; {timeout check}
- if count = 10000 then
- begin
- err := 500;
- comptrue := true;
- end
- until comptrue;
- ParseData := fourBytes(R3Data);
- end;
- if err <> noerr then Writeln ('ADBOp error = ',err);
-
- Writeln ('Device = ',numdevs,' ; Device type = ',DevBlock.devType);
- Writeln ('ADB Address = ',Addrs,' ; Original Address = ',DevBlock.origADBAddr);
- Writeln ('Routine Pointer = ',longint (DevBlock.dbServiceRtPtr),
- ' ;Data Area Address = ',longint (DevBlock.dbDataAreaAddr));
- Writeln ('Handler ID = ',integer(ParseData[2]));
- writeln ('');
- NumDevs := NumDevs - 1;
- until NumDevs = 0;
- Writeln ('Press Mouse to quit');
- repeat until button;
- END;
- END.